import java.util.Arrays;

/**
 * Created With IntelliJ IDEA
 * Description:牛客网：BM69 把数字翻译成字符串
 * <a href="https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668?tpId=295&tqId=1024831&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj">...</a>
 * User: DELL
 * Data: 2022-11-05
 * Time: 23:44
 */

//动态规划
public class Solution {
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
        //题目中保证字符串不为空，因此不需要判空处理
        //排除第一个字符为‘0’
        if (nums.equals("0")) {
            return 0;
        }
        int len = nums.length();
        //当0的前面不是1或2时，无法译码，0种
        for (int i = 1; i < len; i++) {
            if (nums.charAt(i - 1) != '1' && nums.charAt(i - 1) != '2' && nums.charAt(i) == '0') {
                return 0;
            }
        }
        int[] dp = new int[len + 1];
        Arrays.fill(dp,1);
        for (int i = 2; i < len + 1; i++) {
            //在11-19，21-26之间的情况
            if((nums.charAt(i - 2) == '1' && nums.charAt(i - 1) != '0') || (nums.charAt(i - 2) == '2' && nums.charAt(i - 1) > '0' && nums.charAt(i - 1) < '7'))
                dp[i] = dp[i - 1] + dp[i - 2];
            else
                dp[i] = dp[i - 1];
        }
        return dp[len];
    }
}
